#ifndef CommModuleION_H
#define CommModuleION_H
#include "Module.h"
#include <iostream>
#include <map>
#include <memory>
#include <mutex>
#include <string>
#include"Logger.h"
class CommTable 
{
public:
    typedef std::shared_ptr<CommTable> ptr;

    // 获取单例对象
    static std::shared_ptr<CommTable> get_instance()
    {
        static ptr instance(new CommTable());
        return instance;
    }
    // 添加元素（线程安全）
    void add(const std::string& name, int fd)
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        m_comm_tables[name] = fd;
    }

    // 删除元素（线程安全）
    bool remove(const std::string& name)
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        auto it = m_comm_tables.find(name);
        if (it != m_comm_tables.end()) {
            m_comm_tables.erase(it);
            return true;
        }
        return false;
    }

    // 获取元素（线程安全）
    int get(const std::string& name)
    {
        std::lock_guard<std::mutex> lock(m_mutex);
        auto it = m_comm_tables.find(name);
        if (it != m_comm_tables.end()) {
            int fd = it->second;
            return fd;
        }
        return 0;
    }
private:
    CommTable() = default;
    std::map<std::string, int> m_comm_tables;
    std::mutex m_mutex; // 保护 m_comm_tables 的互斥锁
};
class CommModule:public Module
{
public:    
     CommModule(std::string name);
    int write_message(std::string name,uint64_t value);
private:
    CommTable::ptr m_commTable;
};

#endif // CommModuleION_H
